Thực đơn
JSP Cú pháp JSPMột trang JSP có thể được phân thành từng phần nhỏ như sau:
<jsp:include>
<% scriptlet %>
<%= expression %>
<%! declaration %>
Vì dữ liệu tĩnh được viết ra trong phần hồi âm HTTP (HTTP response) cũng giống như nó được viết trong tập tin nhận vào (input file), cho nên dữ liệu nhập hợp lệ của JSP thường là một trang HTML bình thường, không có mã java hoặc hành động JSP nhúng trong đó. Với dữ liệu tĩnh này, bất cứ lúc nào trình chủ web hồi âm, trình chủ web cũng sẽ gửi cùng một dữ liệu sang trang trình khách.
Chỉ phối JSP (JSP directives) điều khiển cách mà bộ biên dịch JSP khởi tạo một servlet. Các chỉ phối hiện có được liệt kê như sau:
include
– Chỉ phối include
thông báo cho bộ biên dịch JSP cho nhập toàn bộ nội dung của một tập tin vào trong nội dung hiện có. Việc làm này tương tự như việc chúng ta lấy nội dung của tập tin đó dán trực tiếp vào trong nội dung của tập tin đang dùng. Tính năng này cũng tương tự như tính năng "#include" của Bộ tiền xử lý C (C preprocessor). Tập tin được nhập thường có đuôi mở rộng (extension) là "jspf" (do JSP Fragment (mảnh, đoạn) mà ra): <%@ include file="somefile.ext" %>
page (Trang)
– Có nhiều tùy chọn với chỉ phối page
.
|
<%@ page import="java.util.*" %> //example import <%@ page contentType="text/html" %> //example contentType <%@ page isErrorPage=false %> //example for non error page <%@ page isThreadSafe=true %> //example for a thread safe JSP
Chú ý: Chỉ có chỉ phối trang "import" là có thể được dùng nhiều lần trong cùng một trang JSP.
<%@ taglib prefix="myprefix" uri="taglib/mytag.tld" %>
Các biến văn lệnh (scripting variables) sau có thể dùng lúc nào cũng được:
Có 3 thành phần chính trong văn lệnh. Chúng cho phép mã Java được chèn (insert) trực tiếp vào trong servlet.
<%! int serverInstanceVariable = 1; %>
<% int localStackBasedVariable = 1; out.println(localStackBasedVariable); %>
<%= "expanded inline data " + 1 %>
Hành động JSP là các thẻ XML được dùng để khởi động chức năng mà máy chủ web vốn có. Những hành động sau đây được cung cấp:
|
<html><head></head><body><jsp:include page="mycommon.jsp" > <jsp:param name="extraparam" value="myvalue" /></jsp:include>name:<%=request.getParameter("extraparam")%></body></html>
<jsp:forward page="subpage.jsp" > <jsp:param name="forwardedFrom" value="this.jsp" /></jsp:forward>
Trong ví dụ tiếp tới này, yêu cầu được chuyển về phía trước tới "subpage.jsp". Thao tác xử lý yêu cầu không quay trở lại trang này.
<jsp:plugin type=applet height="100%" width="100%" archive="myjarfile.jar,myotherjar.jar" codebase="/applets" code="com.foo.MyApplet" > <jsp:params> <jsp:param name="enableDebug" value="true" /> </jsp:params> <jsp:fallback> Trình duyệt web của bạn không hỗ trợ những applet này. </jsp:fallback></jsp:plugin>
Ví dụ plugin trên minh họa một phương pháp đồng bộ để nhúng applet trong một trang web. Trước khi thẻ <OBJECT> được tạo ra, chưa có một phương pháp chung nào cho phép người ta nhúng các applet cả. Thiết kế của thẻ này tương đối nghèo nàn. Hy vọng những đặc tả của nó trong tương lai sẽ cho phép những cái như đặc tính năng động (dynamic attributes) (height="${param.height}"
, code="${chart}"
v.v.) và thông số năng động (dynamic parameters). Hiện này, thẻ jsp:plugin không cho phép dùng những applet khởi động một cách năng động. Chẳng hạn, nếu chúng ta có một applet biểu hiện đồ thị và nó cần có các dữ liệu về tọa độ được truyền cho nó thông qua các thông số, chúng ta không thể dùng jsp:params, trừ phi số điểm tọa độ là một số cố định. Chúng ta không thể, ví dụ, luân chuyển qua danh sách loạt kết quả (ResultSet) để kiến tạo các thẻ jsp:param
. Chúng ta phải tự tính toán cho từng cái thẻ jsp:param
một. Đương nhiên, mỗi một thẻ jsp:param
ấy có thể có một cái tên và một giá trị tùy định.
<jsp:useBean id="myBean" class="com.foo.MyBean" scope="request" /><jsp:getProperty name="myBean" property="lastChanged" /><jsp:setProperty name="myBean" property="lastChanged" value="<%= new Date()%>" />
Những thuộc tính về phạm vi ảnh hưởng (scope attribute) có thể là yêu cầu (request), trang (page), phiên giao dịch (session), hoặc trình ứng dụng (application). Ý nghĩa của các thuộc tính như sau:
Ví dụ trên sử dụng Chương trình quản lý Bean (Bean Manager) để tạo một thực thể (instance) của lớp com.foo.MyBean
và lưu trữ thực thể trong thuộc tính (attribute) có tên là "myBean". Thuộc tính tồn tại trong toàn bộ thời gian của yêu cầu. Nó có thể được chia sẻ giữa tất cả các trang JSP đã được bao gồm hay những trang được chuyển về phía trước từ trang JSP nhận yêu cầu đầu tiên.
Cùng với các hành động JSP định sẵn, các nhà phát triển có thể thêm vào các hành động tùy biến của họ dùng các hàm API của JSP hỗ trợ cho việc mở rộng thẻ (JSP Tag Extension API). Các nhà phát triển sẽ viết một lớp Java (class) để thực thi một trong các thẻ giao diện (Tag interfaces) và cung cấp một tập tin chứa mô tả XML về thư viện thẻ. Tập tin này được dùng để xác định các thẻ và các lớp Java (java classes) thực hiện các thẻ đó.
Xem xét ví dụ sau:
<%@ taglib uri="mytaglib.tld" prefix="myprefix" %>
...
<myprefix:myaction> <%-- thẻ mở đầu %>
...
</myprefix:myaction> <%-- thẻ kết thúc %>
...
Bộ biên dịch JSP sẽ đọc tập tin XML mytaglib.tld
và phát hiện rằng thẻ myaction
được thực hiện bởi lớp Java (java class) tên MyActionTag
(xem ở dưới). Lần đầu tiên, khi thẻ này được dùng trong tập tin JSP, nó sẽ tạo nên một thực thể (instance) của MyActionTag
. Sau đó (và mỗi lần thẻ này được dùng lại), nó sẽ khởi động phương thức doStartTag()
khi nó gặp thẻ "mở đầu" (start). Nó thẩm tra kết quả của thẻ "mở đầu", và quyết định phương pháp để xử lý phần thân của thẻ. Thân của thẻ là phần văn bản nằm giữa thẻ "mở đầu" và thẻ "kết thúc" (end). Phương thức doStartTag()
có thể trả về một trong những hằng sau:
Khi gặp thẻ "kết thúc", nó gọi phương thức doEndTag(). Phương thức này có thể trả lại một trong hai giá trị:
Thẻ myaction
cần phải có một lớp (class) thực thi nó, tương tự như phần sau đây:
public class MyActionTag extends TagSupport { //Giải phóng mọi thực thể của biến (instance variable) - trong bộ nhớ. public void release() {...} public MyActionTag() {... } //gọi khi gặp thẻ "mở đầu" public int doStartTag() {... } //gọi khi gặp thẻ "kết thúc" public int doEndTag() {... } }
Thực đơn
JSP Cú pháp JSPLiên quan
JSP JYP Entertainment JSTOR JS Kaga (DDH-184) JSF JSS (The Walking Dead) JS Asuka (ASE-6102) J-pop JSON Jupp HeynckesTài liệu tham khảo
WikiPedia: JSP http://www.courses.coreservlets.com/Course-Materia... http://java.sun.com/products/jsp/